package demo02;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @ClassName ArrayList
 * @Description ArrayList的测试类
 * @Author 李明忠
 * @Date 2025/5/31 20:07
 * @Version 1.0
 */
@SuppressWarnings("all")
public class ArrayListTest {
    /**
     * 二维集合
     * @param args
     */
    public static void main(String[] args) {
        List<List<Integer>> list = new ArrayList<>();

        //list中的第一个元素
        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(2);
        //将list中的第一个元素放进去
        list.add(list1);

        //list中的第二个元素
        List<Integer> list2 = new ArrayList<>();
        list2.add(3);
        list2.add(4);
        list2.add(5);
        //将list中的第二个元素放进去
        list.add(list2);

        System.out.println(list);

    }
    /**
     * 集合的习题:
     *  str1: welcome to bit
     *  str2: come
     *  要求：将str1中的str2的所有元素删除，最终保留wl t bit
     * @param args
     */
    public static void main13(String[] args) {

        String str1 = "welcome to bit";
        String str2 = "come";

        ArrayList<Character> arrayList = new ArrayList<>();

        for (int i = 0; i < str1.length(); i++) {
            char ch = str1.charAt(i);
//            if (!str1.contains(ch)) {//报错！！！因为他要传字符串，处理办法就是+""
//
//            }
            if (!str2.contains(ch+"")) {
                arrayList.add(ch);//自动包装
            }
        }

        for (int i = 0; i < arrayList.size(); i++) {
            System.out.print(arrayList.get(i));//wl t bit
        }
    }
    /**
     * ArrayList集合的遍历方式04- 迭代器遍历
     * @param args
     */
    public static void main12(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        //创建一个迭代器对象，在ArrayList集合中会有一个iterator方法
        //通过调用iterator便可获得一个迭代器对象
        Iterator<Integer> iterator = list.iterator();

        while(iterator.hasNext()) {
            int x = iterator.next();
            System.out.print(x + " ");
        }
    }
    /**
     * ArrayList集合的遍历方式03- for-each循环
     * @param args
     */
    public static void main11(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        for (int x: list) {
            System.out.print(x + " ");
        }

//        for (int x: list) {//实现自动拆箱
//            System.out.print(x + " ");
//        }
    }
    /**
     * ArrayList集合的遍历方式02-for循环
     * @param args
     */
    public static void main10(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
    }
    /**
     * ArrayList集合的遍历方式01-使用sout
     * @param args
     */
    public static void main9(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        System.out.println(list);
    }
    /**
     * subList和set的一起使用
     * @param args
     */
    public static void main8(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(99);
        list.add(2);
        list.add(3);
        list.add(4);
        System.out.println(list);
        //     [1, 99, 2, 3, 4]
        //下标  0   1  2  3  4

        //将2,3,4截取出来
        List<Integer> test = list.subList(2,5);//从2开始到5-1=4结束
        System.out.println(test);//[2, 3, 4]
                             //下标 0  1   2

        //此时将test中下标为1的值3修改为100
        test.set(1,100);
        System.out.println("===============");
        //此时打印list和test中的内容
        //逻辑上结果为：list:[1,99,2,3,4]
        //            test:[2,100,4]
        //但是实际上的结果却是：   list:[1,99,2,100,4]
        //                      test:[2,100,4]
        System.out.println(list);//[1, 99, 2, 100, 4]
        System.out.println(test);//[2, 100, 4]
    }
    /**
     * 截取部分list
     * @param args
     */
    public static void main7(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(99);
        list.add(2);
        list.add(3);
        list.add(4);
        System.out.println(list);
        System.out.println("================");
        //     [1, 99, 2, 3, 4]
        //下标  0   1  2  3  4

        //将2,3,4截取出来
        List<Integer> test = list.subList(2,5);//从2开始到5-1=4结束
        System.out.println(test);//[2, 3, 4]
    }
    /**
     * 其他操作
     * @param args
     */
    public static void main6(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(99);
        list.add(2);
        list.add(2);
        list.add(3);
        //[1, 99, 2, 2, 3]

        //判断99是否在list集合中
        boolean flag = list.contains(99);//底层实现自动包装
        System.out.println(flag);//true

        //判断100是否在list集合中
        boolean flag1 = list.contains(100);//底层实现自动包装
        System.out.println(flag1);//false
    }
    /**
     * 修改元素值
     * @param args
     */
    public static void main5(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(99);
        list.add(2);
        list.add(2);
        list.add(3);
        System.out.println(list);
        System.out.println("==================");
        //将下标为1出的99改为100
        list.set(1,100);
        System.out.println(list);
    }
    /**
     * 查找值
     * @param args
     */
    public static void main4(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(99);
        list.add(2);
        list.add(2);
        list.add(3);
        //      [1  99  2  2  3]
        //下标：  0  1   2  3  4

        //根据值获取下标

        //1.获取指定值2第一次出现的下标
        int index1 = list.indexOf(2);//底层自动实现了自动包装
        System.out.println(index1);//2

        //2.获取指定值2最后一次出现的下标
        int index2 = list.lastIndexOf(2);//底层自动实现了自动包装
        System.out.println(index2);//3
//        //根据下标获取值
//        int num = list.get(1);//99
//        System.out.println(num);//99
    }
    /**
     * 删除指定元素
     * @param args
     */
    public static void main3(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(99);
        list.add(2);
        list.add(3);
        System.out.println(list);//[1, 99, 2, 3]
        System.out.println("================");
        //此时如果你想直接删除99这个值：请问传99可不可以？
        list.remove(new Integer(99));//在list集合中找到99并将其删除。
        System.out.println(list);//[1, 2, 3]
        System.out.println("============");
        list.clear();
        System.out.println(list);
    }

    /**
     * 删除下标元素
     * @param args
     */
    public static void main2(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(99);
        list.add(2);
        list.add(3);
        System.out.println(list);//[1, 99, 2, 3]
        System.out.println("================");
        //删除1号下标位置的值99
        list.remove(1);
        System.out.println(list);
    }
    public static void main1(String[] args) {
//        ArrayList<Integer> arrayList = new ArrayList<>();
//        arrayList.add(1);
//        arrayList.add(2);
//        arrayList.add(3);
//        arrayList.add(4);
//        arrayList.add(5);
//        arrayList.add(6);
//        arrayList.add(7);
//        arrayList.add(8);
//        arrayList.add(9);
//        arrayList.add(10);
//        System.out.println("arrayList = " + arrayList);
//        System.out.println("====================================");
//        arrayList.add(11);
//        arrayList.add(1,10);
//        System.out.println(arrayList);
        ArrayList<Integer> list = new ArrayList<>();
        list.add(10);
        list.add(11);
        list.add(12);
        System.out.println(list);
        System.out.println("======================");

        ArrayList<Integer> test = new ArrayList<>();
        test.add(100);
        test.addAll(list);
        System.out.println(test);
    }
}
